#ifndef DEVMANAGEDIALOG_H
#define DEVMANAGEDIALOG_H

//Библиотека Qt.
#include <QDialog>


//Объявление внешних классов.
class DevManager;
class VidDevice;
class DevParamsWidget;
class MotionParamsWidget;
class TreeDeviceItem;
class QTreeWidget;
class QTreeWidgetItem;
class QTabWidget;
class QProgressBar;


class DevManageDialog : public QDialog
{
	Q_OBJECT
signals:
	void information(const QString &msg);
	void warning(const QString &msg);
	void critical(const QString &msg);

	void devicesConnect(const QList<VidDevice *> &viddevlist);
	void devicesDisconnect(const QList<int> &devindexlist);

	void vidWinTypeChange(const QString &vidwintype);

public:
	//Конструктор.
	DevManageDialog(DevManager *devmanager, QWidget *parent = NULL);

	//Деструктор.
	virtual ~DevManageDialog();

private:
	//Менеджер видеоустройств.
	DevManager *devManager;

	//Виджет параметров устройств.
	DevParamsWidget *devParamsWdg;

	//Виджет параметров ДД.
	MotionParamsWidget *motionParamsWdg;

	QTreeWidget *devsWdg;

	QAction *delDevAct;

	QTabWidget *paramsTBWdg;

	//Загрузка CPU и памяти.
	QProgressBar *cpuPBar;
	double cpuUsage;

	//Функция управления доступностью виджетов.
	void setEnabledWidgets(bool enabled);

	//Функция форматирования визуального списка устройств.
	void devsWidgetAdjust();

	//Функция подключения или отключения видеоокон.
	void setVideoWindowConnect(TreeDeviceItem *item);

	//Функция подключения или отключения детектора движения.
	void setMotionConnect(TreeDeviceItem *item);

private slots:
	//Слот поиска устройств.
	void slotFindDevices();

	//Слот добавления устройства.
	void slotAddDevice();

	//Слот добавления файлового плэйера.
	void slotAddFilePlayer();

	//Слот удаления устройства.
	void slotDeleteDevice();

	//Слот обновления визуального списка устройств.
	void slotReloadDevices();

	//Слот активации устройства в списке.
	void slotDeviceClicked(QTreeWidgetItem *wdgitem);

	//Слот изменения устройства в списке.
	void slotDeviceChanged(QTreeWidgetItem *wdgitem, int column);

	//Слот сработки таймера, отслеживающего загрузку системы.
	void slotLoadTimerTimeout();

};

#endif
